﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Turnero.Entidades;
using Turnero.DAOs;

namespace Turnero.Paciente
{
    public partial class frmModificarPaciente : Form
    {
         Turnero.Entidades.Paciente paciente;
         
         private DAO_Pacientes pacienteDAO = new DAO_Pacientes();

        public frmModificarPaciente(Turnero.Entidades.Paciente pac)
        {
            InitializeComponent();
            paciente = pac;

            txtApellidos.Text = paciente.Ape;
            txtCelular.Text = paciente.Cel;
        
            txtDomicilio.Text = paciente.Domicilio;
            txtEmail.Text = paciente.Email;
            txtNombres.Text = paciente.Nom;
            txtNroDoc.Text = paciente.Nrodoc;
            txtObservaciones.Text = paciente.Obs;
            txtTelefono.Text = paciente.Tel;
            cbxLocalidad.Text = paciente.Localidad;
            cbxSexo.Text = paciente.Sexo;
            cbxTipoDoc.Text = paciente.Tipodoc;
            dtpFechaNac.Text = paciente.Fechanac;

           

       
        }

        private void frmModificarPaciente_Load(object sender, EventArgs e)
        {

        }

        

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtApellidos.Text = "";
            txtNombres.Text = "";
            txtNroDoc.Text = "";
            txtDomicilio.Text = "";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtCuitCuil.Text = "";
            txtObservaciones.Text = "";

            cbxLocalidad.Text = "Alta Gracia";
            cbxSexo.SelectedIndex = 0;
            cbxTipoDoc.SelectedIndex = 0;

            txtApellidos.Focus();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            
            if (MessageBox.Show("¿Desea actualizar los datos del paciente?", "Confirmacion cambios", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                //Checkeo de campos obligatorios.
                if (validar())
                {
                    if (dtpFechaNac.Value > System.DateTime.Now)
                    {
                        MessageBox.Show("La fecha de nacimiento del paciente no puede ser mayor al dia de hoy!", "Fecha Incorrecta", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    string cod, ape, nom, tipodoc, nrodoc, sexo, dom, tel, cel, email, cuitcuil, obs;
                    DateTime fechanac;
                    Int32 loc;

                    cod = paciente.Cod;
                    ape = txtApellidos.Text.ToUpper().Trim();
                    nom = txtNombres.Text.ToUpper().Trim();
                    tipodoc = cbxTipoDoc.SelectedItem.ToString();
                    nrodoc = txtNroDoc.Text.Trim();
                    fechanac = Convert.ToDateTime(dtpFechaNac.Value.Date.ToString("yyyy-MM-dd"));
                    sexo = cbxSexo.SelectedItem.ToString();
                    dom = txtDomicilio.Text.ToUpper().Trim();
                    loc = Convert.ToInt32(cbxLocalidad.SelectedValue.ToString());
                    tel = txtTelefono.Text;
                    cel = txtCelular.Text;
                    email = txtEmail.Text.Trim();
                    cuitcuil = txtCuitCuil.Text;
                    obs = txtObservaciones.Text.Trim();

                    Boolean actualizar = pacienteDAO.actualizarPaciente(cod, ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, obs);
                    if (actualizar)
                    {
                        MessageBox.Show("Los datos del paciente se actualizaron exitosamente", "Actualizacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Se produjo un error al actualizar el paciente en el sistema", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("Faltan completar datos obligatorios en el formulario", "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }

            private Boolean validar()
        {
            Boolean ok = false;

            if (!txtApellidos.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtNombres.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtNroDoc.Text.Equals("") && cbxTipoDoc.SelectedIndex>(-1))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtDomicilio.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }     
       
            String temp = (txtCuitCuil.Text.Replace("-", string.Empty)).Trim();
            if (!temp.Equals(""))
            {
                Boolean cuitResultado;
                cuitResultado = validaCuit(txtCuitCuil.Text);
                if (cuitResultado == false)
                {
                    MessageBox.Show("CUIT no válido");
                    txtCuitCuil.Focus();
                    return false;
                }

            }
            else
            {
                ok = true;
            }
            
            return ok;
        }

        private bool validaCuit(string cuit)
        {
            if (cuit == null)


                return false;



            //Quito los guiones, el cuit resultante debe tener 11 caracteres.
            cuit = cuit.Replace("-", string.Empty);


            if (cuit.Length != 11)
            {

                return false;
            }

            else
            {

                int calculado = CalcularDigitoCuit(cuit);

                int digito = int.Parse(cuit.Substring(10));

                return calculado == digito;

            }
        }

        private int CalcularDigitoCuit(string cuit)
        {

            int[] mult = new[] { 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 };

            char[] nums = cuit.ToCharArray();

            int total = 0;

            for (int i = 0; i < mult.Length; i++)
            {

                total += int.Parse(nums[i].ToString()) * mult[i];
            }

            var resto = total % 11;

            return resto == 0 ? 0 : resto == 1 ? 9 : 11 - resto;

        }


        }
    }

